package cn.itcast.scala.course03

/**
  * Scala循环
  * create by zhangtian on 2018/12/29
  */
object ScalaCycle {
  def main(args: Array[String]): Unit = {
    // to  前闭后闭 是Range实现
    // until 前闭后开 是Range实现
    // Range 前闭后开
    // for
    // while

    for (i <- 1 to 10){
      print(i + "  ")
    }
    println()

    for (i <- 1.to(10)){
      print(i + "  ")
    }
    println()

    for (i <- 1 until 10){
      print(i + "  ")
    }
    println()

    for (i <- 1.until(10)){
      print(i + "  ")
    }
    println()

    for (i <- Range(1, 10) if i%2 == 0 ){
      print(i + "  ")
    }
    println()

    for (i <- Range(1, 10, 2)){
      print(i + "  ")
    }
    println()

    var courses = Array("Scala", "SparkSQL", "SparkStreaming", "Stom", "Apache Flink")
    for(course <- courses) {
      print(course + "  ")
    }
    println()

    // course其实就是courses里面的每个元素
    // =>就是将左边的course做用上一个函数，变成另一个结果
    // print就是作用在course上的一个函数
    courses.foreach(course => print(course + "  "))
    println()

    var (num, sum) = (100, 0)
    while (num > 0) {
      sum += num
      num -= 1
    }

    println("sum result: " +sum)

    val l = List("alice", "bob", "cathy")
    for(// 遍历list并输出
      s <- l // generator 这里表示迭代list l中的元素，每次迭代会将l中的元素赋值给s
    )println(s)

    for{
      s <- l
      if(s.length > 3) // filter 当前这次迭代，如果元素的长度大于3  才输出结果。否则直接跳到下一次循环
    }println(s)

    val result_for = for{
      s <- l
      s1 = s.toUpperCase() // variable binding
      if (s1 != "")
    } yield (s1) // generate new collection  循环如果满足条件，则把s1放到一个新的collection中，导出一个新的collection
    println(result_for)
  }
}
